#pragma once

#include "iostream"
#include "vector"
#include "algorithm"
#include "TypeDefin.h"

using namespace std;

/*HJJ QQ479287006
 *请完成一个函数，输入一个二叉树，该函数输出它的镜像。

例如输入：

     4
   /   \
  2     7
 / \   / \
1   3 6   9
镜像输出：

     4
   /   \
  7     2
 / \   / \
9   6 3   1

 

示例 1：

输入：root = [4,2,7,1,3,6,9]
输出：[4,7,2,9,6,3,1]

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/er-cha-shu-de-jing-xiang-lcof
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * */

void mirrorTreeT(TreeNode *root) {

    if (root->left == nullptr && root->right == nullptr)
        return;

    TreeNode *temp = root->left;
    root->left = root->right;
    root->right = temp;

    //前序和后续遍历可以 中序就不行了 因为中序交换之后 另外一个节点交换不过来
    mirrorTree(root->left);
    mirrorTree(root->right);

}

//个人感觉就是交换二叉树节点
TreeNode *mirrorTree(TreeNode *root) {
    TreeNode *ret = root;

    mirrorTreeT(root);
    return ret;

}